package com.wind.stream;

import java.util.Arrays;
import java.util.List;

/**
 * Stream的使用：规约
 *
 * @author Wind
 * @date 2021-06-06
 */
public class Test06Stream {
    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 3, 2, 8, 11, 4);
        /*
            求和
         */
        // 求和方式一：调用Integer的sum()方法
        Integer sum1 = list.stream().reduce(Integer::sum).get();
        System.out.println(sum1);
        // 求和方式二：同方式一 多了一个初始值。怎么理解呢？类似于原来的写法 定义一个 int sum = 0，遍历集合后 sum+=。下面方法的第一个参数类似于 定义的 sum = 0
        Integer sum2 = list.stream().reduce(0, Integer::sum);
        System.out.println(sum2);
        // 求和方式三：
        Integer sum3 = list.stream().reduce((x, y) -> x + y).get();
        System.out.println(sum3);

        /*
            求乘积
         */
        Integer cj = list.stream().reduce((x, y) -> x * y).get();
        System.out.println(cj);

        /*
            求最大值
         */
        // 方式一：Stream的max()方法
        Integer max1 = list.stream().max(Integer::compareTo).get();
        System.out.println(max1);
        // 方式二：自己实现比较 最后返回比较结果
        Integer max2 = list.stream().reduce((x, y) -> x > y ? x : y).get();
        System.out.println(max2);
        // 方式三：利用Integer的max()方法
        Integer max3 = list.stream().reduce(Integer::max).get();
        System.out.println(max3);

    }
}
